package com.aiwiown.snackmq.storage.transaction;

import com.aiwiown.snackmq.common.message.Message;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.ToString;

import java.io.Serializable;

/**
 * 代表一条事务日志记录。
 */
@Getter
@AllArgsConstructor
@ToString
public class TransactionRecord implements Serializable {
    private static final long serialVersionUID = 7834587123912345L;

    /**
     * 全局唯一的事务ID
     */
    private final String transactionId;
    /**
     * 记录类型 (PREPARE, COMMIT, ROLLBACK)
     */
    private final TransactionState recordType;
    /**
     * 记录创建的时间戳
     */
    private final long timestamp;
    /**
     * 消息本身。对于 PREPARE 记录，这是半消息；对于 COMMIT/ROLLBACK，此字段可为 null。
     */
    private final Message message;

    /**
     * 发送此半消息的生产者的唯一ID。
     * Broker 将根据此ID找到对应的生产者连接并发起回查。
     */
    private final String producerId;
}
